package br.ucb.ucblive.HIB;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.hibernate.sql.JoinType;

import br.ucb.ucblive.beans.Mensagem;
import br.ucb.ucblive.beans.MensagemUsuario;
import br.ucb.ucblive.beans.MensagemUsuarioPK;
import br.ucb.ucblive.beans.Usuario;

public class MensagemHIB extends BaseHIB  {

	@SuppressWarnings("unchecked")
	public List<Mensagem> listarMensagensByUsuario(String login) {
		Session session = HibernateUtil.getSession();
		try {
			String hql = "select mensagem from Mensagem mensagem "
					   + "inner join mensagem.mensagemUsuario mensagemUsuario "
					   + "inner join mensagemUsuario.id.usuario usuario "
					   + "where usuario.login=:login and mensagemUsuario.loginRemetente!=:login " 
					   + "order by mensagem.data desc";
			
			return (List<Mensagem>)session.createQuery(hql).
			setParameter("login", login).
			list();
			
		} finally {
			session.close();
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Mensagem> listarMensagensByUsuarioRemetente(String login) {
		Session session = HibernateUtil.getSession();
		try {
			String hql = "select mensagem from Mensagem mensagem "
					   + "inner join mensagem.mensagemUsuario mensagemUsuario "
					   + "inner join mensagemUsuario.id.usuario usuario "
					   + "where usuario.login=:login and mensagemUsuario.loginRemetente=:login " 
					   + "order by mensagem.data desc";
			
			return (List<Mensagem>)session.createQuery(hql).
			setParameter("login", login).
			list();
			
		} finally {
			session.close();
		}
	}
	
	public int isNotLidaSize(Usuario usuario, ArrayList<Mensagem> mensagens){
		MensagemUsuarioHIB muHIB = new MensagemUsuarioHIB();
		MensagemUsuarioPK id = new MensagemUsuarioPK();
		MensagemUsuario mensagemUsuario = new MensagemUsuario();
		int cont = 0;
		
		for (Mensagem msg : mensagens) {
			id.setUsuario(usuario);
			id.setMensagem(msg);
			mensagemUsuario = muHIB.consultar(id);
			if(mensagemUsuario.getStatus()==1){
				cont++;
			}
		}
		
		return cont;
	}
	

}
